/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controllers;
import cl.ventas.modelo.Usuario;
import cl.ventas.modelo.dao.UsuarioDao;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class loginController extends MultiActionController{

    public ModelAndView login(HttpServletRequest hsr, HttpServletResponse hsr1) throws Exception {
        ModelAndView mav = new ModelAndView("login");
        Date fecha = new Date();
        mav.addObject("fecha", fecha);
        return mav;
    }
    public ModelAndView RegistrarCliente(HttpServletRequest hsr, HttpServletResponse hsr1) throws Exception {
        ModelAndView mav = new ModelAndView("RegistrarCliente");
        return mav;
    }
     public ModelAndView GuardarUsuario(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = null;
        List errorMsgs = new LinkedList();
        UsuarioDao usuario = new UsuarioDao();
        HttpSession sesion = request.getSession();
        List<Usuario> lista = usuario.findAll();
        try {
        String name = request.getParameter("usuario_nombre");
        String apellido= request.getParameter("usuario_apellido");
        String user = request.getParameter ("usuario_user");
        String pw = request.getParameter("usuario_clave");

        if (name.trim().length()==0){
        errorMsgs.add("Ingrese su nombre.");
        }
        if (apellido.trim().length()==0){
        errorMsgs.add("Ingrese su apellido.");
        }
        if (user.trim().length()==0){
        errorMsgs.add("Ingrese su usuario.");
        }
         else if (lista!=null){
        for (int i = 0 ; i<lista.size();i++){
        if (lista.get(i).getUsuario_user().compareTo(user)==0){
        errorMsgs.add("El usuario ya existe");
        break;
        }}}
        if (pw.trim().length()==0){
        errorMsgs.add("Ingrese su contraseña");
        }
        
        if ( ! errorMsgs.isEmpty() ) {
        mav = new ModelAndView("RegistrarCliente");
        mav.addObject("errorMsgs", errorMsgs);
        }

        else {
            
        Usuario u=new Usuario();
        u.setUsuario_apellido(apellido);
        u.setUsuario_clave(pw);
        u.setUsuario_nombre(name);
        u.setUsuario_privilegio(0);
        u.setUsuario_user(user); 

        usuario.save(u);
        sesion.setAttribute("usuario", u);
        mav = new ModelAndView("listado");

        }
        }
        catch (RuntimeException e){
        errorMsgs.add("ocurrio un error inesperado");
        errorMsgs.add(e);
        mav = new ModelAndView("error");
        mav.addObject("errorMsgs", errorMsgs);
        }

        return mav;
    }
   
    public ModelAndView inicioSesion(HttpServletRequest request, HttpServletResponse response) throws Exception{
        //Se crea un ModelAndView llamado mav pero null, luego se le pone el nombre con la direccion hacia donde
        //va y todo lo demas
        ModelAndView mav = null;
        List errorMsgs = new LinkedList();
        try{
            //Lo rutinario, comprueba los datos
            String user = request.getParameter("txtUsuario");
            String clave = request.getParameter("txtClave");
            
            HttpSession sesion = request.getSession();
            
            if(user.trim().length()==0){
                errorMsgs.add("Ingrese su usuario");
                user = "";
            }
            if(clave.trim().length()==0){
                errorMsgs.add("Ingrese su clave");
                clave = "";
            }
            Usuario u=new Usuario();
            u.setUsuario_user(user);
            u.setUsuario_clave(clave);
            
            u=u.verificarUsuario(user, clave);
            
            if (user.trim().length()>0&&clave.trim().length()>0){
            if(u==null){
                errorMsgs.add("El usuario o la clase estan incorrectos");}
            }
            
            
            //Aqui cambia todo, se rellena mav segun el resultado de todo, 
            //si errorMsgs tiene errores que mostrar reenvia todo al login
            //Si no hay error setea al a sesion a Usuario y envia hacia el listado
            if(!errorMsgs.isEmpty()){
                mav = new ModelAndView("login");
                mav.addObject("errorMsgs", errorMsgs);
                mav.addObject("user", user);
                mav.addObject("pass", clave);
            }else{
                if (u.getUsuario_privilegio()==0){
                sesion.setAttribute("usuario", u);
                mav = new ModelAndView("listado");}
                else {
                sesion.setAttribute("usuario", u);
                mav = new ModelAndView("ListadoAdmin");
                }
                
            } 
        
        }catch(RuntimeException e){
            errorMsgs.add("ocurrio un error inesperado");
            errorMsgs.add(e);
            mav = new ModelAndView("error");
            mav.addObject("errorMsgs", errorMsgs);
        }
        return mav;
    }

}
